package cn.doitedu.day04;

import java.util.ArrayList;
import java.util.List;

public class MyList {

    private List<Integer> lst;

    public MyList(List<Integer> lst) {
        this.lst = lst;
    }

    //map方法中传入的参数是什么类型
    public List<Integer> map(MapFunction func) {
        //定义一个新的ArrayList（原来装处理后的数据）
        ArrayList<Integer> nList = new ArrayList<>();
        //遍历原来List中的数据
        for (Integer in : lst) {
            //应用外部传入的逻辑
            Integer out = func.invoke(in);
            //将返回的数据添加到新的List中
            nList.add(out);
        }
        //返回新的List
        return nList;
    }

    public List<Integer> filter(FilterFunction func) {
        //1.定义一个新的List，用来装过滤后的数据
        ArrayList<Integer> nList = new ArrayList<>();
        //2.遍历原来List中的数据
        for (Integer in : lst) {
            //应用外部的过滤逻辑
            boolean flag = func.invoke(in);
            //如果返回true就添加到新的List中
            if (flag) {
                nList.add(in);
            }
        }
        //返回新的List
        return nList;
    }

}
